package com.zhangxin.sunnyweather.logic.network

import retrofit2.Call
import retrofit2.Callback
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlin.coroutines.suspendCoroutine

object SunnyWeatherNetwork {
    private val placeService=ServiceCreator.create<PlaceService>()
    private val weatherService=ServiceCreator.create<WeatherService>()


    suspend fun searchPlaces(query:String)=placeService.searchPlaces(query).await()
    suspend fun getDailyWeather(lng:String,lat:String)=weatherService.getDailyWeather(lng,lat).await()
    suspend fun getRealtimeWeather(lng:String,lat:String)=weatherService.getRealtimeWeather(lng,lat).await()

    private suspend fun <T> Call<T>.await(): T {

        return suspendCoroutine {
            continuation ->
            enqueue(object : Callback<T> {
                override fun onResponse(call: Call<T>, response: retrofit2.Response<T>) {
                    val body = response.body()
                    if (body != null) continuation.resume(body) else continuation.resumeWithException(RuntimeException("response body is null"))
                }

                override fun onFailure(call: Call<T>, t: Throwable) {
                    continuation.resumeWithException(t)
                }
            })
        }
    }


}